package com.example.apartment.service;

import com.example.apartment.domain.Admin;
import com.example.apartment.domain.Student;

import java.util.List;

/**
 * StudentService 学生业务层接口
 *
 * @author wuzexin
 * @date 2021/10/28 14:26
 */
public interface StudentService {

    /**
     * 学生用户登录
     *
     * @param sid      学号
     * @param password 密码
     * @return 返回学生信息
     */
    Student login(String sid, String password);

    /**
     * 查询学生信息
     *
     * @param admin 管理员信息
     * @return 学生列表
     */
    List<Student> select(Admin admin);

    /**
     * 添加学生功能
     *
     * @param admin        管理员信息
     * @param sid          学号
     * @param name         姓名
     * @param sex          性别
     * @param nation       民族
     * @param major        专业
     * @param classroom    班级
     * @param cellphone    手机号码
     * @param password     密码
     * @param buildingName 宿舍楼名字
     * @param roomNum      宿舍号
     * @param bedNum       床位号
     * @return 学生信息
     */
    Student addStudent(Admin admin, String sid, String name, Integer sex, String nation, String major,
                       String classroom, String cellphone, String password, String buildingName,
                       Integer roomNum, Integer bedNum);


    /**
     * 删除学生功能
     *
     * @param admin 管理员信息
     * @param id    要删除的学生id
     */
    void delStudent(Admin admin, Integer id);

    /**
     * 根据id查询学生信息
     *
     * @param admin 管理员信息
     * @param id    学生id
     * @return 学生信息
     */
    Student selectById(Admin admin, Integer id);

    /**
     * 修改学生信息
     *
     * @param admin        管理员信息
     * @param id           学生主键id
     * @param sid          学号
     * @param name         姓名
     * @param sex          性别
     * @param nation       民族
     * @param major        专业
     * @param classroom    班级
     * @param cellphone    手机号码
     * @param password     密码
     * @param buildingName 宿舍楼名字
     * @param roomNum      宿舍号
     * @param bedNum       床位号
     * @return 学生信息
     */
    Student editStudent(Admin admin, Integer id, String sid, String name, Integer sex, String nation, String major,
                        String classroom, String cellphone, String password, String buildingName,
                        Integer roomNum, Integer bedNum);

    /**
     * 查询所有未分配宿舍学生信息
     *
     * @param admin 管理员信息
     * @return 学生列表
     */
    List<Student> selectNoBed(Admin admin);

    /**
     * 学生查询个人信息
     *
     * @param student 学生用户信息
     * @return 个人信息
     */
    Student selectSelf(Student student);

    /**
     * 查询室友信息
     *
     * @param student 学生用户信息
     * @return 学生列表
     */
    List<Student> selectRoommate(Student student);

    /**
     * 查询所有班级列表
     *
     * @param admin
     * @return
     */
    List selectAllClassroom(Admin admin);

    /**
     * 查询所有未分配宿舍床位的学生人数
     *
     * @param admin
     * @param classroom
     * @param gender
     * @return
     */
    int selectNoBedStuCount(Admin admin, String classroom, Integer gender);

    /**
     * 自动分配宿舍
     *
     * @param admin        管理员用户信息
     * @param classroom    班级
     * @param buildingName 宿舍楼
     * @param sex          性别
     * @return 已分配人数
     */
    int autoSetApartment(Admin admin, String classroom, String buildingName, int sex);
}
